package tragame.server.authentification;




import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.HashMap;

import tragame.server.interfaces.IGestionComptes;

public class GestionComptes extends UnicastRemoteObject implements IGestionComptes {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private HashMap<String,CompteJoueur> comptes ;
	
	public  GestionComptes() throws RemoteException{
		super();
		try {
			ObjectInputStream ois = new ObjectInputStream(new FileInputStream("Comptes"));
			
			comptes = (HashMap<String, CompteJoueur>) ois.readObject();
		} catch (FileNotFoundException e) {
			comptes = new HashMap<String,CompteJoueur>();	
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			
			
		}
		
	}
	
	public synchronized HashMap getComptes(String pseudo){
		return comptes;
	}
	
	public synchronized boolean ajouterJoueur(String pseudo,String password) throws RemoteException{
		CompteJoueur compte = new CompteJoueur(pseudo,password);
		if(verifPseudo(compte.getPseudo())){
			comptes.put(compte.getPseudo(),compte);
			try {
				ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("Comptes"));
				oos.writeObject(comptes);
				oos.flush();
			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} 
			System.out.println("Ajout de "+pseudo+" "+password);
			listerJoueur();
			System.out.println("===========================================================");
			return true;
		}else return false;		
	}
	
	public synchronized boolean supprimerJoueur(String pseudo) throws RemoteException{
		if(!verifPseudo(pseudo)){
			comptes.remove(pseudo);
			System.out.println("Suppression de "+pseudo);
			listerJoueur();
			System.out.println("===========================================================");
			return true;
		}else 
			return false;		
	}
	private void listerJoueur(){
		for(String key :comptes.keySet()  ){
			System.out.print(comptes.get(key).toString());
		}
	}
	
	
	private boolean verifPseudo(String pseudo){
		if(comptes.get(pseudo)==null) return true;
		else return false;
	}

	

}
